<?php


require_once 'SC/SCanimal.php';
require_once 'SC/SCdeplacement.php';
require_once 'SC/SCloge.php';

require_once 'SC/SCbatiment.php';


/**
 * Classe permettant de gérer les services fonctionnel manipulant de déplacements 
 * @author Zikrija
 * @date 04.05.2012
 */
class SFdeplacement{


    /**
     * Service fonctionnel permettant d'ajouter un déplacement
     * @param Deplacement l'objet déplacement à ajouter
     * @return Deplacement l'objet déplacement ajouté 
     */
    public function ajouter(Deplacement $unDeplacementAAjouter) {
        $unDeplacementMemorise      = null;
        $SCbatiment = new SCbatiment();
        $SCloge = new SCloge();
        $SCanimal = new SCanimal();
        $SCdeplacement = new SCdeplacement();
        // Vérifie l'existance d'un bâtiment
        $unBatimentValide = $SCbatiment->lister(new Batiment($unDeplacementAAjouter->getBatiment_nom()));
        if($unBatimentValide['0']){
            // Vérifie l'existance d'une loge
            $uneLogeValide = $SCloge->lister(new Loge($unDeplacementAAjouter->getLoge_nom(), null, $unBatimentValide['0']->getNom()));
            if($uneLogeValide['0']){
                // Vérifie l'existance d'un animal
                $unAnimalValide = $SCanimal->lister(new Animal($unDeplacementAAjouter->getAnimal_id(), null, null, null, null, null, null, null, null, null, null, null, null, null, null));
                if($unAnimalValide['0']){
                    // Mémorise le déplacement
                    $unDeplacementMemorise = $SCdeplacement->ajouter($unDeplacementAAjouter);
                }
            }
        }
        return $unDeplacementMemorise;
    }

    /**
     * Service Fonctionnel permettant la modification d'un déplacement
     * @param Deplacement L'objet Déplacement à modifier
     * @return Deplacement L'objet Deplacement modifié 
     */
    public function modifier(Deplacement $unDeplacementAModifier) {
        $unDeplacementModifie      = null;
        $SCbatiment = new SCbatiment();
        $SCloge = new SCloge();
        $SCanimal = new SCanimal();
        $SCdeplacement = new SCdeplacement();
        
        // Vérifie l'existance du déplacement
        $unDeplacementExistant = $SCdeplacement->lister(new Deplacement($unDeplacementAModifier->getId(), null, null, null, null));
        if($unDeplacementExistant['0']){
            // Vérifie l'existance d'un bâtiment
            $unBatimentValide = $SCbatiment->lister(new Batiment($unDeplacementAModifier->getBatiment_nom()));
            if($unBatimentValide['0']){
                // Vérifie l'existance d'une loge
                $uneLogeValide = $SCloge->lister(new Loge($unDeplacementAModifier->getLoge_nom(), null, $unBatimentValide['0']->getNom()));
                if($uneLogeValide['0']){
                    // Vérifie l'existance d'un animal
                    $unAnimalValide = $SCanimal->lister(new Animal($unDeplacementAModifier->getAnimal_id(), null, null, null, null, null, null, null, null, null, null, null, null, null, null));
                    if($unAnimalValide['0']){
                        // Modifie le déplacement
                        $unDeplacementModifie = $SCdeplacement->modifier($unDeplacementAModifier);
                    }
                }
            }
        }
        return $unDeplacementModifie;
    }

    /**
     * TODO: Supprime un deplacement
     * @param int identifiant du deplacement à supprimer
     * @return Boolean True si le deplacement a été supprimé, False sinon
     */
    public function supprimer($idDeplacementASupprimer) {
        $SCdeplacement = new SCdeplacement();
        $unDeplacementSupprime = null;
        // Vérifie l'existance du déplacement
        $unDeplacementExistant = $SCdeplacement->lister(new Deplacement($idDeplacementASupprimer, null, null, null, null));
        if($unDeplacementExistant['0']){
            $unDeplacementSupprime = $SCdeplacement->supprimer($unDeplacementExistant['0']->getId());
        }
        return $unDeplacementSupprime;
    }
    
    /**
     * Service Fonctionnel permettant de lister les déplacements
     * @param Deplacement Objet Deplacement contenant les critères de sélection
     * @return Deplacement[] Une liste de déplacements correspondant aux critères de selection 
     */
    public function lister(Deplacement $deplacementARechercher) {
        $SCdeplacement = new SCdeplacement();
        return $listeDeplacements = $SCdeplacement->lister($deplacementARechercher);
    }
}

?>
